給定一個字母或者字符串,按順序計算字母或者字符串出現的字符和次數
example:
input = [1, 1, 1, 2, 3, 3, 3, 2, 2, 5, 5, 8, 8, 0]
except = [[1, 3], [2, 1], [3, 3], [2, 2], [5, 2], [8, 2], [0, 1]]
因爲字典裏面key是唯一的,並且無序。不能用元組來存儲。只能用列表
def list_count(input_list):
ret = []
for key, value in enumerate(input_list):
if key == len(input_list)-1:
if input_list[-1] != input_list[-2]: # 判斷結尾,如果最後一個數和前一個不同就直接添加。否則pass.
ret.append([value, 1])
break
elif input_list[key] == input_list[key+1]: # 判斷當前值和後面的值是否相同。
if ret and ret[-1][0] == value: # 如果ret不爲空並且ret最後一個列表裏面的key等於當前值,執行加1操作。
ret[-1][-1] += 1
else:
# 否則append進去一個列表,值爲2.
ret.append([input_list[key], 2])
elif input_list[key] != input_list[key+1]:
# 如果當前值不等於下一個值。
if not ret or ret[-1][0] != value: # 如果ret爲空,或者ret最後一個列表裏面的key不等於當前值,添加一個列表到ret中,值爲1。
ret.append([input_list[key], 1])
return ret
之所以會寫這個,是在leetcode上遇到的問題。這種寫法比較笨。當時考慮其他的沒有嘗試這種做法, 這裏記錄一下這種寫法。 原題
原題還有一些其他的解法,比如用正則,或者
----------------------------------分割線--------------------------------------------------
寫完了才發現這方法python已經封裝了。
from itertools import groupby
這個方法之前就看到了,一直沒用到。時間長就忘了還有這樣一個函數。
from itertools import groupby
[[key, len(list(group))] for key, group in itertools.groupby("applabbc")]
具體用法看官方文檔是最好不過了